package com.demo.java.OD401_450.OD429;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【机场航班调度程序(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146317495
 */
public class OdMain {
    // 主函数，接受航班号数组，返回排序后的航班号字符串
    public static String flightSort(String[] flightNumbers) {
        // 使用自定义比较器对航班号进行排序
        Arrays.sort(flightNumbers, new CustomComparator());
        // 将排序后的数组转回逗号分隔的字符串
        return String.join(",", flightNumbers);
    }

    // 自定义比较器，定义排序规则
    private static class CustomComparator implements Comparator<String> {
        // 定义排序顺序，字符按照这个顺序比较
        private final String order = "$&*,0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        @Override
        public int compare(String flightNumber1, String flightNumber2) {
            // 比较前两个字符
            int index1_1 = order.indexOf(flightNumber1.charAt(0));
            int index2_1 = order.indexOf(flightNumber2.charAt(0));

            if (index1_1 != index2_1) {
                return Integer.compare(index1_1, index2_1); // 若前两个字符不同，按顺序排序
            }

            int index1_2 = order.indexOf(flightNumber1.charAt(1));
            int index2_2 = order.indexOf(flightNumber2.charAt(1));

            if (index1_2 != index2_2) {
                return Integer.compare(index1_2, index2_2); // 若第二个字符不同，继续按顺序排序
            }

            // 比较数字部分
            int number1 = Integer.parseInt(flightNumber1.substring(2));
            int number2 = Integer.parseInt(flightNumber2.substring(2));

            return Integer.compare(number1, number2); // 比较数字大小
        }
    }

    public static void main(String[] args) {
        // 创建 Scanner 对象以读取控制台输入
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入航班号
        System.out.println("请输入航班号，用逗号分隔:");
        String inputFlights = scanner.nextLine(); // 读取用户输入的航班号字符串

        // 将输入的航班号分割成数组
        String[] inputFlightsArray = inputFlights.split(",");

        // 调用排序函数
        String output = flightSort(inputFlightsArray);

        // 输出排序后的航班号
        System.out.println("排序后的航班号: " + output);

        // 关闭 Scanner
        scanner.close();
    }
}
